%% @texfile{ %% author = "Karl Berry et al.", %% version = "2.2", %% date = "Wed Nov 11 06:40:30 EST 1992", %% filename = "eplain.tex", %% email = "karl@cs.umb.edu", %% address = "135 Center Hill Rd. // Plymouth, MA 02360" %% checksum = "1870 4680 64461", %% codetable = "ISO/ASCII", %% supported = "yes", %% docstring = "This file defines macros that extend and expand on %% plain TeX.", \def\makeactive#1{\catcode`#1 = \active \ignorespaces}% \chardef\letter = 11 \chardef\other = 12 \edef\leftdisplays{\the\catcode`@}% \catcode`@ = \letter \let\@oldatcatcode = \leftdisplays \def\uncatcodespecials{% \def\do##1{\catcode`##1 = \other}% \dospecials \makeactive\^^M % \long\gdef\letreturn#1{\let^^M = #1}% \let\@eattoken = \relax % Define this, so \eattoken can be used in \edef. \def\eattoken{\let\@eattoken = }% \def\gobble#1{}% \def\gobbletwo#1#2{}% \def\gobblethree#1#2#3{}% \def\identity#1{#1}% \def\@gobblemeaning#1:->{}% \def\sanitize{\expandafter\@gobblemeaning\meaning}% \def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}% \def\expandonce{\expandafter\noexpand}% \let\@plainwlog = \wlog \let\wlog = \gobble \newlinechar = `^^J \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{\tracingcommands\tw@\tracingstats\tw@ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne \showboxbreadth\maxdimen\showboxdepth\maxdimen \def\tracingboxes{\showboxbreadth = \maxdimen \showboxdepth = \maxdimen}% \def\gtracingoff{\begingroup \globaldefs = 1 \tracingoff \endgroup}% \def\tracingoff{\tracingonline\z@\tracingcommands\z@\tracingstats\z@ \tracingpages\z@\tracingoutput\z@\tracinglostchars\z@ \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@ \showboxbreadth5 \showboxdepth3 \begingroup \catcode`\{ = 12 \catcode`\} = 12 \catcode`\[ = 1 \catcode`\] = 2 \gdef\lbracechar[{]% \gdef\rbracechar[}]% \catcode`\% = \other \gdef\percentchar[%]\endgroup \def^^L{\par}% \def\vpenalty{\ifhmode\par\fi \penalty}% \def\hpenalty{\ifvmode\leavevmode\fi \penalty}% \let\@ifempty = \iffalse \ifx\@undefinedmessage\@undefined \def\@undefinedmessage {No .aux file; I won't warn you about undefined labels.}% %% @texfile{ %% author = "Karl Berry and Oren Patashnik", %% version = "0.99j", %% date = "14 Mar 1992", %% filename = "btxmac.tex", %% address = "Please use electronic mail", %% checksum = "834 4503 33061", %% email = "opbibtex@cs.stanford.edu", %% codetable = "ISO/ASCII", %% supported = "yes", %% docstring = "Defines macros that make BibTeX work with plain TeX", \edef\cite{\the\catcode`@}% \catcode`@ = 11 \let\@oldatcatcode = \cite \chardef\@letter = 11 \chardef\@other = 12 \def\@innerdef#1#2{\edef#1{\expandafter\noexpand\csname #2\endcsname}}% \@innerdef\@innernewcount{newcount}% \@innerdef\@innernewdimen{newdimen}% \@innerdef\@innernewif{newif}% \@innerdef\@innernewwrite{newwrite}% \def\@gobble#1{}% \ifx\inputlineno\@undefined \let\@linenumber = \empty % Pre-3.0. \else \def\@linenumber{\the\inputlineno:\space}% \def\@futurenonspacelet#1{\def\cs{#1}% \afterassignment\@stepone\let\@nexttoken= \begingroup % The grouping here avoids stepping on an outside use of `\\'. \def\\{\global\let\@stoken= }% \\ % now \@stoken is a space token (\\ is a control symbol, so that \endgroup \def\@stepone{\expandafter\futurelet\cs\@steptwo}% \def\@steptwo{\expandafter\ifx\cs\@stoken\let\@@next=\@stepthree \else\let\@@next=\@nexttoken\fi \@@next}% \def\@stepthree{\afterassignment\@stepone\let\@@next= }% \def\@getoptionalarg#1{% \let\@optionaltemp = #1% \let\@optionalnext = \relax \@futurenonspacelet\@optionalnext\@bracketcheck \def\@bracketcheck{% \ifx [\@optionalnext \expandafter\@@getoptionalarg \else \let\@optionalarg = \empty \expandafter\@optionaltemp \fi \def\@@getoptionalarg[#1]{% \def\@optionalarg{#1}% \@optionaltemp \def\@nnil{\@nil}% \def\@fornoop#1\@@#2#3{}% \def\@for#1:=#2\do#3{% \edef\@fortmp{#2}% \ifx\@fortmp\empty \else \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}% \fi \def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi \def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil \let\@nextwhile=\@fornoop \else #4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}% \@innernewif\if@fileexists \def\@testfileexistence{\@getoptionalarg\@finishtestfileexistence}% \def\@finishtestfileexistence#1{% \begingroup \def\extension{#1}% \immediate\openin0 = \ifx\@optionalarg\empty\jobname\else\@optionalarg\fi \ifx\extension\empty \else .#1\fi \space \ifeof 0 \global\@fileexistsfalse \else \global\@fileexiststrue \fi \immediate\closein0 \endgroup \toks0 = {% \def\bibliographystyle#1{% \@readauxfile \@writeaux{\string\bibstyle{#1}}% \let\bibstyle = \@gobble \let\bblfilebasename = \jobname \def\bibliography#1{% \@readauxfile \@writeaux{\string\bibdata{#1}}% \@testfileexistence[\bblfilebasename]{bbl}% \if@fileexists \nobreak \@readbblfile \fi \let\bibdata = \@gobble \def\nocite#1{% \@readauxfile \@writeaux{\string\citation{#1}}% \@innernewif\if@notfirstcitation \def\cite{\@getoptionalarg\@cite}% \def\@cite#1{% \let\@citenotetext = \@optionalarg \printcitestart \nocite{#1}% \@notfirstcitationfalse \@for \@citation :=#1\do {% \expandafter\@onecitation\@citation\@@ }% \ifx\empty\@citenotetext\else \printcitenote{\@citenotetext}% \fi \printcitefinish \def\@onecitation#1\@@{% \if@notfirstcitation \printbetweencitations \fi \expandafter \ifx \csname\@citelabel{#1}\endcsname \relax \if@citewarning \message{\@linenumber Undefined citation `#1'.}% \fi \expandafter\gdef\csname\@citelabel{#1}\endcsname{% {\tt \escapechar = -1 \nobreak\hskip0pt \expandafter\string\csname#1\endcsname \nobreak\hskip0pt }% }% \fi \csname\@citelabel{#1}\endcsname \@notfirstcitationtrue \def\@citelabel#1{b@#1}% \def\@citedef#1#2{\expandafter\gdef\csname\@citelabel{#1}\endcsname{#2}}% \def\@readbblfile{% \ifx\@itemnum\@undefined \@innernewcount\@itemnum \fi \begingroup \def\begin##1##2{% \setbox0 = \hbox{\biblabelcontents{##2}}% \biblabelwidth = \wd0 }% \def\end##1{}% ##1 is `thebibliography' again. \@itemnum = 0 \def\bibitem{\@getoptionalarg\@bibitem}% \def\@bibitem{% \ifx\@optionalarg\empty \expandafter\@numberedbibitem \else \expandafter\@alphabibitem \fi }% \def\@alphabibitem##1{% \expandafter \xdef\csname\@citelabel{##1}\endcsname {\@optionalarg}% \ifx\biblabelprecontents\@undefined \let\biblabelprecontents = \relax \fi \ifx\biblabelpostcontents\@undefined \let\biblabelpostcontents = \hss \fi \@finishbibitem{##1}% }% \def\@numberedbibitem##1{% \advance\@itemnum by 1 \expandafter \xdef\csname\@citelabel{##1}\endcsname{\number\@itemnum}% \ifx\biblabelprecontents\@undefined \let\biblabelprecontents = \hss \fi \ifx\biblabelpostcontents\@undefined \let\biblabelpostcontents = \relax \fi \@finishbibitem{##1}% }% \def\@finishbibitem##1{% \biblabelprint{\csname\@citelabel{##1}\endcsname}% \@writeaux{\string\@citedef{##1}{\csname\@citelabel{##1}\endcsname}}% \ignorespaces }% \let\em = \bblem \let\newblock = \bblnewblock \let\sc = \bblsc \frenchspacing \clubpenalty = 4000 \widowpenalty = 4000 \tolerance = 10000 \hfuzz = .5pt \everypar = {\hangindent = \biblabelwidth \advance\hangindent by \biblabelextraspace}% \bblrm \parskip = 1.5ex plus .5ex minus .5ex \biblabelextraspace = .5em \bblhook \input \bblfilebasename.bbl \endgroup \@innernewdimen\biblabelwidth \@innernewdimen\biblabelextraspace \def\biblabelprint#1{% \noindent \hbox to \biblabelwidth{% \biblabelprecontents \biblabelcontents{#1}% \biblabelpostcontents }% \kern\biblabelextraspace \def\biblabelcontents#1{{\bblrm [#1]}}% \def\bblrm{\rm}% \def\bblem{\it}% \def\bblsc{\ifx\@scfont\@undefined \font\@scfont = cmcsc10 \fi \@scfont \def\bblnewblock{\hskip .11em plus .33em minus .07em }% \let\bblhook = \empty \def\printcitestart{[}% left bracket \def\printcitefinish{]}% right bracket \def\printbetweencitations{, }% comma, space \def\printcitenote#1{, #1}% comma, space, note (if it exists) \let\citation = \@gobble \@innernewcount\@numparams \def\newcommand#1{% \def\@commandname{#1}% \@getoptionalarg\@continuenewcommand \def\@continuenewcommand{% \@numparams = \ifx\@optionalarg\empty 0\else\@optionalarg \fi \relax \@newcommand \def\@newcommand#1{% \def\@startdef{\expandafter\edef\@commandname}% \ifnum\@numparams=0 \let\@paramdef = \empty \else \ifnum\@numparams>9 \errmessage{\the\@numparams\space is too many parameters}% \else \ifnum\@numparams<0 \errmessage{\the\@numparams\space is too few parameters}% \else \edef\@paramdef{% \ifcase\@numparams \empty No arguments. \or ####1% \or ####1####2% \or ####1####2####3% \or ####1####2####3####4% \or ####1####2####3####4####5% \or ####1####2####3####4####5####6% \or ####1####2####3####4####5####6####7% \or ####1####2####3####4####5####6####7####8% \or ####1####2####3####4####5####6####7####8####9% \fi }% \fi \fi \fi \expandafter\@startdef\@paramdef{#1}% \ifx\nobibtex\@undefined \the\toks0 \fi \def\@readauxfile{% \if@auxfiledone \else % remember: \@auxfiledonetrue if \noauxfile is defined \global\@auxfiledonetrue \@testfileexistence{aux}% \if@fileexists \begingroup \endlinechar = -1 \catcode`@ = 11 \input \jobname.aux \endgroup \else \message{\@undefinedmessage}% \global\@citewarningfalse \fi \immediate\openout\@auxfile = \jobname.aux \fi \newif\if@auxfiledone \ifx\noauxfile\@undefined \else \@auxfiledonetrue\fi \@innernewwrite\@auxfile \def\@writeaux#1{\ifx\noauxfile\@undefined \write\@auxfile{#1}\fi}% \ifx\@undefinedmessage\@undefined \def\@undefinedmessage{No .aux file; I won't give you warnings about undefined citations.}% \@innernewif\if@citewarning \ifx\noauxfile\@undefined \@citewarningtrue\fi \catcode`@ = \@oldatcatcode \let\auxfile = \@auxfile \let\for = \@for \let\futurenonspacelet = \@futurenonspacelet \let\ifempty = \@ifempty \def\iffileexists{\if@fileexists}% \let\innerdef = \@innerdef \let\innernewcount = \@innernewcount \let\innernewdimen = \@innernewdimen \let\innernewif = \@innernewif \let\innernewwrite = \@innernewwrite \let\linenumber = \@linenumber \let\readauxfile = \@readauxfile \let\spacesub = \@spacesub \let\testfileexistence = \@testfileexistence \let\tokstostring = \@tokstostring \let\writeaux = \@writeaux \def\innerinnerdef#1{\expandafter\innerdef\csname inner#1\endcsname{#1}}% \innerinnerdef{newbox}% \innerinnerdef{newfam}% \innerinnerdef{newhelp}% \innerinnerdef{newinsert}% \innerinnerdef{newlanguage}% \innerinnerdef{newmuskip}% \innerinnerdef{newread}% \innerinnerdef{newskip}% \innerinnerdef{newtoks}% \def\immediatewriteaux#1{% \ifx\noauxfile\@undefined \immediate\write\@auxfile{#1}% \fi \begingroup \makeactive\^^M \makeactive\ % No spaces or ^^M's from here on. \gdef\obeywhitespace{% \makeactive\^^M\def^^M{\par\futurelet\next\@finishobeyedreturn}% \makeactive\ \let =\ % \aftergroup\@removebox% \futurelet\next\@finishobeywhitespace% \gdef\@finishobeywhitespace{{% \ifx\next % \aftergroup\@obeywhitespaceloop% \else\ifx\next^^M% \aftergroup\gobble% \fi\fi}}% \gdef\@finishobeyedreturn{% \ifx\next^^M\vskip\blanklineskipamount\fi% \indent% \endgroup \def\@obeywhitespaceloop#1{\futurelet\next\@finishobeywhitespace}% \def\@removebox{% \ifhmode \setbox0 = \lastbox \ifdim\wd0=\parindent \setbox2 = \hbox{\unhbox0}% \ifdim\wd2=0pt \ignorespaces \else \box2 % Put it back: it wasn't empty. \fi \else \box0 % Put it back: it wasn't the right width. \fi \fi \newskip\blanklineskipamount \blanklineskipamount = 0pt \def\frac#1/#2{\leavevmode \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}% \kern-.1em $/$% \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}% \newdimen\hruledefaultheight \hruledefaultheight = 0.4pt \newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt \newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt \def\ehrule{\hrule height\hruledefaultheight depth\hruledefaultdepth}% \def\evrule{\vrule width\vruledefaultwidth}% \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\null}% %%% ==================================================================== %%% @TeX-style-file{ %%% author = "Nelson H. F. Beebe", %%% version = "1.06", %%% date = "27 January 1992", %%% time = "14:20:54 MST", %%% filename = "texnames.sty", %%% address = "Center for Scientific Computing %%% Department of Mathematics %%% South Physics Building %%% University of Utah %%% Salt Lake City, UT 84112 %%% USA %%% Tel: (801) 581-5254 %%% FAX: (801) 581-4148", %%% checksum = "23191 276 1176 10856", %%% email = "beebe@magna.math.utah.edu (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "TeX names", %%% supported = "yes", %%% docstring = "This style file for AmSTeX, LaTeX, and TeX %%% defines macros for the names of TeX %%% and METAFONT programs, in several %%% letter-case variants: %%% \AMSTEX %%% \AMSTeX %%% \AmSTeX %%% \BIBTEX %%% \BIBTeX %%% \BibTeX %%% \LAMSTeX %%% \LAmSTeX %%% \LaTeX %%% \LATEX %%% \METAFONT %%% \MF %%% \SLITEX %%% \SLITeX %%% \SLiTeX %%% \SliTeX %%% It will NOT redefine any macro that %%% already exists, so it can be included %%% harmlessly after other style files. %%% In AmSTeX or Plain TeX, just do %%% \input texnames.sty %%% In LaTeX, do %%% \documentstyle[...,texnames]{...} %%% This file grew out of original work by %%% Richard Furuta %%% Department of Computer Science %%% University of Maryland %%% College Park, MD 20742 %%% furuta@mimsy.umd.edu %%% seismo!umcp-cs!furuta %%% 22 October 1986, first release (1.00) %%% 1 April 1987 (1.01): Modified by William %%% LeFebvre, Rice University to include %%% definitions for BibTeX and SLiTeX, as they %%% appear in the LaTeX Local User's Guide %%% template (the file latex/local.tex in %%% standard distributions) %%% 26 October 1991 (1.02): Modified by %%% Nelson H. F. Beebe to %%% add several new macro names, and adapt for %%% use with Plain TeX and AmSTeX. %%% 26 October 1991 (1.03): Add \LaTeX and %%% \LATEX %%% 25 November 1991 (1.04): Add \LamSTeX %%% and \LAMSTeX %%% 27 January 1991 (1.05 and 1.06): Add slanted %%% font support for \MF. Make several comment %%% changes. Add a couple of missing % at end %%% of line, and replace blank lines by empty %%% comments. %%% The checksum field above contains a CRC-16 %%% checksum as the first value, followed by the %%% equivalent of the standard UNIX wc (word %%% count) utility output of lines, words, and %%% characters. This is produced by Robert %%% Solovay's checksum utility.", %%% } %%% ==================================================================== \ifx\sc\undefined \font\sc=cmcsc10 % must be plain TeX or AmSTeX \ifx\AmSTeX\undefined \def\AmSTeX{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}% \kern-.125em$\cal S$-\TeX}% \ifx\AMSTEX\undefined \let\AMSTEX=\AmSTeX \ifx\AMSTeX\undefined \let\AMSTeX=\AmSTeX \ifx\BibTeX\undefined \def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}% \ifx\BIBTeX\undefined \let\BIBTeX=\BibTeX \ifx\BIBTEX\undefined \let\BIBTEX=\BibTeX \ifx\LAMSTeX\undefined \def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}% \kern-.2em\lower.376ex\hbox{\the\textfont2 M}% \kern-.125em {\the\textfont2 S}-\TeX}% \ifx\LamSTeX\undefined \let\LamSTeX=\LAMSTeX \ifx\LAmSTeX\undefined \let\LAmSTeX=\LAMSTeX \ifx\LaTeX\undefined \def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}% \ifx\LATEX\undefined \let\LATEX=\LaTeX \ifx\MF\undefined \ifx\manfnt\undefined \font\manfnt=logo10 \fi \ifx\manfntsl\undefined \font\manfntsl=logosl10 \fi \def\MF{{\ifdim\fontdimen1\font>0pt \let\manfnt = \manfntsl \fi {\manfnt META}\-{\manfnt FONT}}}% \ifx\METAFONT\undefined \let\METAFONT=\MF \ifx\SLITEX\undefined \def\SLITEX{S\kern-.065em L\kern-.18em\raise.32ex\hbox{i}\kern-.03em\TeX}% \ifx\SLiTeX\undefined \let\SLiTeX=\SLITEX \ifx\SliTeX\undefined \let\SliTeX=\SLITEX \ifx\SLITeX\undefined \let\SLITeX=\SLITEX %%% @texfile{ %%% author = "Philip Taylor", %%% version = "3.04", %%% date = "25 July 1992", %%% time = "17:07 EDT", %%% filename = "path.sty", %%% address = "The Computer Centre %%% RHBNC, University of London %%% Egham Hill %%% Egham, Surrey TW20 0EX, ENGLAND", %%% telephone = "Tel: +44 784 443172", %%% FAX = "Fax: +44 784 434348", %%% checksum = "41143 321 1758 13526", %%% email = "P.Taylor@Vax.Rhbnc.Ac.Uk (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "file name, filename, path name, pathname, %%% discretionary, discretionaries", %%% supported = "yes", %%% docstring = {Computer filenames, host names, and e-mail %%% addresses tend to be long strings that %%% cause line breaking problems for TeX. %%% Sometimes rather long strings are %%% encountered; here are two examples: %%% Friesland%rz.informatik.uni-hamburg.dbp.de%germany.csnet@relay.cs.net %%% mighty-mouse-gw.scrc.symbolics.com %%% This file defines a macro, \path|...|, %%% similar to LaTeX's \verb|...| macro, that %%% sets the text in the typewriter font, %%% allowing hyphen-less line breaks at %%% punctuation characters. %%% The default set of punctuation characters is %%% defined as %%% \discretionaries |~!@$%^&*()_+`-=#{"}[]:;'<>,.?\/| %%% However, you can change it as needed, for example: %%% \discretionaries +@%!.+ %%% would assign to it the set @ % ! . which %%% commonly occur in electronic mail addresses. %%% The delimiter characters surrounding the %%% arguments to \discretionaries and \path %%% will normally be a punctuation character not %%% found in the argument, and not otherwise %%% significant to TeX. In particular, backslash %%% cannot be used as a delimiter. In the rare %%% event that this is required, set %%% \specialpathdelimiterstrue %%% This practice is not recommended, because TeX %%% then runs about four times slower while it is %%% typesetting \path\...\ requests. %%% \specialpathdelimitersfalse is the normal %%% setting. %%% This file may be used in Plain TeX or AmSTeX by %%% \input path.sty %%% and in LaTeX by %%% \documentstyle[...,path,...]{...} %%% The checksum field above contains a CRC-16 %%% checksum as the first value, followed by the %%% equivalent of the standard UNIX wc (word %%% count) utility output of lines, words, and %%% characters. This is produced by Robert %%% Solovay's checksum utility.} %%% } \edef\path{\the\catcode`@}% \catcode`@ = 11 \let\@oldatcatcode = \path \newcount \c@tcode \newcount \c@unter \newif \ifspecialpathdelimiters \begingroup \catcode `\ = 10 \gdef \passivesp@ce { }% \catcode `\ = 13\relax% \gdef\activesp@ce{ }% \endgroup \def \discretionaries % {\begingroup \c@tcodes = 13 \discr@tionaries }% \def \discr@tionaries #1% {\def \discr@ti@naries ##1#1% {\endgroup \def \discr@ti@n@ries ####1% or {\if \noexpand ####1\noexpand #1% \let \n@xt = \relax \else \catcode `####1 = 13 \def ####1{\discretionary {\char `####1}{}{\char `####1}}% \let \n@xt = \discr@ti@n@ries \fi \n@xt }% \def \discr@ti@n@ri@s {\discr@ti@n@ries ##1#1}% }% \discr@ti@naries }% \let\pathafterhook = \relax \def \path {\ifspecialpathdelimiters \begingroup \c@tcodes = 12 \def \endp@th {\endgroup \endgroup \pathafterhook}% \else \def \endp@th {\endgroup \pathafterhook}% \fi \p@th }% \def \p@th #1% {\begingroup \tt \c@tcode = \catcode `#1 \discr@ti@n@ri@s \catcode `\ = \active \expandafter \edef \activesp@ce {\passivesp@ce \hbox {}}% \catcode `#1 = \c@tcode \def \p@@th ##1#1% {\leavevmode \hbox {}##1% \endp@th }% \p@@th }% \def \c@tcodes {\afterassignment \c@tc@des \c@tcode}% \def \c@tc@des {\c@unter = 0 \loop \ifnum \catcode \c@unter = \c@tcode \else \catcode \c@unter = \c@tcode \fi \ifnum \c@unter < 255 \advance \c@unter by 1 \repeat \catcode `\ = 10 }% \catcode `\@ = \@oldatcatcode \discretionaries |~!@$%^&*()_+`-=#{}[]:";'<>,.?\/|% \def\blackbox{\vrule height .8ex width .6ex depth -.2ex \relax}% square bullet \def\makeblankbox#1#2{% \ifvoid0 \errhelp = \@makeblankboxhelp \errmessage{Box 0 is void}% \fi \hbox{\lower\dp0 \vbox{\hidehrule{#1}{#2}% \kern -#1% overlap rules \hbox to \wd0{\hidevrule{#1}{#2}% \raise\ht0\vbox to #1{}% vrule height \lower\dp0\vtop to #1{}% vrule depth \hfil\hidevrule{#2}{#1}% }% \kern-#1\hidehrule{#2}{#1}% }% \newhelp\@makeblankboxhelp{Assigning to the dimensions of a void^^J% box has no effect. Do `\string\setbox0=\string\null' before you^^J% define its dimensions.}% \def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2}% \def\hidevrule#1#2{% \kern-#1% \dimen0=#1\advance\dimen0 by #2% \vrule width\dimen0 \kern-#2% \newdimen\boxitspace \boxitspace = 3pt \long\def\boxit#1{% \vbox{% \ehrule \hbox{% \evrule \kern\boxitspace \vbox{\kern\boxitspace \parindent = 0pt #1\kern\boxitspace}% \kern\boxitspace \evrule }% \ehrule \def\numbername#1{\ifcase#1% zero% \or one% \or two% \or three% \or four% \or five% \or six% \or seven% \or eight% \or nine% \or ten% \or #1% \fi \edef\thinlines{\the\catcode`@ }% \catcode`@ = 11 \let\@oldatcatcode = \thinlines \edef\@oldandcatcode{\the\catcode`& }% \catcode`& = 11 \def\&whilenoop#1{}% \def\&whiledim#1\do #2{\ifdim #1\relax#2\&iwhiledim{#1\relax#2}\fi}% \def\&iwhiledim#1{\ifdim #1\let\&nextwhile=\&iwhiledim \else\let\&nextwhile=\&whilenoop\fi\&nextwhile{#1}}% \newif\if&negarg \newdimen\&wholewidth \newdimen\&halfwidth \font\tenln=line10 \def\thinlines{\let\&linefnt\tenln \let\&circlefnt\tencirc \&wholewidth\fontdimen8\tenln \&halfwidth .5\&wholewidth}% \def\thicklines{\let\&linefnt\tenlnw \let\&circlefnt\tencircw \&wholewidth\fontdimen8\tenlnw \&halfwidth .5\&wholewidth}% \def\drawline(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax \&linelen=#3\relax \ifnum\&xarg =0 \&vline \else \ifnum\&yarg =0 \&hline \else \&sline\fi\fi}% \def\&sline{\leavevmode \ifnum\&xarg< 0 \&negargtrue \&xarg -\&xarg \&yyarg -\&yarg \else \&negargfalse \&yyarg \&yarg \fi \ifnum \&yyarg >0 \&tempcnta\&yyarg \else \&tempcnta -\&yyarg \fi \ifnum\&tempcnta>6 \&badlinearg \&yyarg0 \fi \ifnum\&xarg>6 \&badlinearg \&xarg1 \fi \setbox\&linechar\hbox{\&linefnt\&getlinechar(\&xarg,\&yyarg)}% \ifnum \&yyarg >0 \let\&upordown\raise \&clnht\z@ \else\let\&upordown\lower \&clnht \ht\&linechar\fi \&clnwd=\wd\&linechar \&whiledim \&clnwd <\&linelen \do {% \&upordown\&clnht\copy\&linechar \advance\&clnht \ht\&linechar \advance\&clnwd \wd\&linechar \advance\&clnht -\ht\&linechar \advance\&clnwd -\wd\&linechar \&tempdima\&linelen\advance\&tempdima -\&clnwd \&tempdimb\&tempdima\advance\&tempdimb -\wd\&linechar \hskip\&tempdimb \multiply\&tempdima \@m \&tempcnta \&tempdima \&tempdima \wd\&linechar \divide\&tempcnta \&tempdima \&tempdima \ht\&linechar \multiply\&tempdima \&tempcnta \divide\&tempdima \@m \advance\&clnht \&tempdima \ifdim \&linelen <\wd\&linechar \hskip \wd\&linechar \else\&upordown\&clnht\copy\&linechar\fi}% \def\&hline{\vrule height \&halfwidth depth \&halfwidth width \&linelen}% \def\&getlinechar(#1,#2){\&tempcnta#1\relax\multiply\&tempcnta 8 \advance\&tempcnta -9 \ifnum #2>0 \advance\&tempcnta #2\relax\else \advance\&tempcnta -#2\relax\advance\&tempcnta 64 \fi \char\&tempcnta}% \def\drawvector(#1,#2)#3{\&xarg #1\relax \&yarg #2\relax \&tempcnta \ifnum\&xarg<0 -\&xarg\else\&xarg\fi \ifnum\&tempcnta<5\relax \&linelen=#3\relax \ifnum\&xarg =0 \&vvector \else \ifnum\&yarg =0 \&hvector \else \&svector\fi\fi\else\&badlinearg\fi}% \def\&hvector{\ifnum\&xarg<0 \rlap{\&linefnt\&getlarrow(1,0)}\fi \&hline \ifnum\&xarg>0 \llap{\&linefnt\&getrarrow(1,0)}\fi}% \def\&vvector{\ifnum \&yarg <0 \&downvector \else \&upvector \fi}% \def\&svector{\&sline \&tempcnta\&yarg \ifnum\&tempcnta <0 \&tempcnta=-\&tempcnta\fi \ifnum\&tempcnta <5 \if&negarg\ifnum\&yarg>0 % 3d quadrant; dp > 0 \llap{\lower\ht\&linechar\hbox to\&linelen{\&linefnt \&getlarrow(\&xarg,\&yyarg)\hss}}\else % 4th quadrant; ht > 0 \llap{\hbox to\&linelen{\&linefnt\&getlarrow(\&xarg,\&yyarg)\hss}}\fi \else\ifnum\&yarg>0 % 1st quadrant; ht > 0 \&tempdima\&linelen \multiply\&tempdima\&yarg \divide\&tempdima\&xarg \advance\&tempdima-\ht\&linechar \raise\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\else \&tempdima\&linelen \multiply\&tempdima-\&yarg % 2d quadrant; dp > 0 \divide\&tempdima\&xarg \lower\&tempdima\llap{\&linefnt\&getrarrow(\&xarg,\&yyarg)}\fi\fi \else\&badlinearg\fi}% \def\&getlarrow(#1,#2){\ifnum #2 =\z@ \&tempcnta='33\else \&tempcnta=#1\relax\multiply\&tempcnta \sixt@@n \advance\&tempcnta -9 \&tempcntb=#2\relax\multiply\&tempcntb \tw@ \ifnum \&tempcntb >0 \advance\&tempcnta \&tempcntb\relax \else\advance\&tempcnta -\&tempcntb\advance\&tempcnta 64 \fi\fi\char\&tempcnta}% \def\&getrarrow(#1,#2){\&tempcntb=#2\relax \ifnum\&tempcntb < 0 \&tempcntb=-\&tempcntb\relax\fi \ifcase \&tempcntb\relax \&tempcnta='55 \or \ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta 24 \advance\&tempcnta -6 \else \ifnum #1=3 \&tempcnta=49 \else\&tempcnta=58 \fi\fi\or \ifnum #1<3 \&tempcnta=#1\relax\multiply\&tempcnta 24 \advance\&tempcnta -3 \else \&tempcnta=51\fi\or \&tempcnta=#1\relax\multiply\&tempcnta \sixt@@n \advance\&tempcnta -\tw@ \else \&tempcnta=#1\relax\multiply\&tempcnta \sixt@@n \advance\&tempcnta 7 \fi\ifnum #2<0 \advance\&tempcnta 64 \fi \char\&tempcnta}% \def\&vline{\ifnum \&yarg <0 \&downline \else \&upline\fi}% \def\&upline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth height \&linelen depth \z@\hss}}% \def\&downline{\hbox to \z@{\hskip -\&halfwidth \vrule width \&wholewidth height \z@ depth \&linelen \hss}}% \def\&upvector{\&upline\setbox\&tempboxa\hbox{\&linefnt\char'66}\raise \&linelen \hbox to\z@{\lower \ht\&tempboxa\box\&tempboxa\hss}}% \def\&downvector{\&downline\lower \&linelen \hbox to \z@{\&linefnt\char'77\hss}}% \def\&badlinearg{\errmessage{Bad \string\arrow\space argument.}}% \thinlines \countdef\&xarg 0 \countdef\&yarg 2 \countdef\&yyarg 4 \countdef\&tempcnta 6 \countdef\&tempcntb 8 \dimendef\&linelen 0 \dimendef\&clnwd 2 \dimendef\&clnht 4 \dimendef\&tempdima 6 \dimendef\&tempdimb 8 \chardef\@arrbox 0 \chardef\&linechar 2 \chardef\&tempboxa 2 % \&linechar and \&tempboxa don't interfere. \let\lft^% \let\rt_% distinguish between \rt and \lft \newif\if@pslope % test for positive slope \def\@findslope(#1,#2){\ifnum#1>0 \ifnum#2>0 \@pslopetrue \else\@pslopefalse\fi \else \ifnum#2>0 \@pslopefalse \else\@pslopetrue\fi\fi}% \def\generalsmap(#1,#2){\getm@rphposn(#1,#2)\plnmorph\futurelet\next\addm@rph}% \def\sline(#1,#2){\setbox\@arrbox=\hbox{\drawline(#1,#2){\sarrowlength}}% \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}% \def\arrow(#1,#2){\setbox\@arrbox=\hbox{\drawvector(#1,#2){\sarrowlength}}% \@findslope(#1,#2)\d@@blearrfalse\generalsmap(#1,#2)}% \newif\ifd@@blearr \def\bisline(#1,#2){\@findslope(#1,#2)% \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel \rlap{\drawline(#1,#2){\sarrowlength}}% \hskip\@hchannel\hbox{\drawline(#1,#2){\sarrowlength}}}% \d@@blearrtrue\generalsmap(#1,#2)}% \def\biarrow(#1,#2){\@findslope(#1,#2)% \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel \rlap{\drawvector(#1,#2){\sarrowlength}}% \hskip\@hchannel\hbox{\drawvector(#1,#2){\sarrowlength}}}% \d@@blearrtrue\generalsmap(#1,#2)}% \def\adjarrow(#1,#2){\@findslope(#1,#2)% \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi \getch@nnel(#1,#2)\setbox\@arrbox=\hbox{\@upordown\@vchannel \rlap{\drawvector(#1,#2){\sarrowlength}}% \hskip\@hchannel\hbox{\drawvector(-#1,-#2){\sarrowlength}}}% \d@@blearrtrue\generalsmap(#1,#2)}% \newif\ifrtm@rph \def\@shiftmorph#1{\hbox{\setbox0=\hbox{$\scriptstyle#1$}% \setbox1=\hbox{\hskip\@hm@rphshift\raise\@vm@rphshift\copy0}% \wd1=\wd0 \ht1=\ht0 \dp1=\dp0 \box1}}% \def\@hm@rphshift{\ifrtm@rph \ifdim\hmorphposnrt=\z@\hmorphposn\else\hmorphposnrt\fi \else \ifdim\hmorphposnlft=\z@\hmorphposn\else\hmorphposnlft\fi \fi}% \def\@vm@rphshift{\ifrtm@rph \ifdim\vmorphposnrt=\z@\vmorphposn\else\vmorphposnrt\fi \else \ifdim\vmorphposnlft=\z@\vmorphposn\else\vmorphposnlft\fi \fi}% \def\addm@rph{\ifx\next\lft\let\temp=\lftmorph\else \ifx\next\rt\let\temp=\rtmorph\else\let\temp\relax\fi\fi \temp}% \def\plnmorph{\dimen1\wd\@arrbox \ifdim\dimen1<\z@ \dimen1-\dimen1\fi \vcenter{\box\@arrbox}}% \def\lftmorph\lft#1{\rtm@rphfalse \setbox0=\@shiftmorph{#1}% \if@pslope \let\@upordown\raise \else \let\@upordown\lower\fi \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss % \dimen1=\wd\@arrbox \llap{\box0}\hss}\hskip\@hmorphdflt}\futurelet\next\addm@rph}% \def\rtmorph\rt#1{\rtm@rphtrue \setbox0=\@shiftmorph{#1}% \if@pslope \let\@upordown\lower \else \let\@upordown\raise\fi \llap{\@upordown\@vmorphdflt\hbox to\dimen1{\hss \rlap{\box0}\hss}\hskip-\@hmorphdflt}\futurelet\next\addm@rph}% \def\getm@rphposn(#1,#2){\ifd@@blearr \dimen@\morphdist \advance\dimen@ by .5\channelwidth \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\dimen@}\else \@getshift(#1,#2){\@hmorphdflt}{\@vmorphdflt}{\morphdist}\fi}% \def\getch@nnel(#1,#2){\ifdim\hchannel=\z@ \ifdim\vchannel=\z@ \@getshift(#1,#2){\@hchannel}{\@vchannel}{\channelwidth}% \else \@hchannel\hchannel \@vchannel\vchannel \fi \else \@hchannel\hchannel \@vchannel\vchannel \fi}% \def\@getshift(#1,#2)#3#4#5{\dimen@ #5\relax \&xarg #1\relax \&yarg #2\relax \ifnum\&xarg<0 \&xarg -\&xarg \fi \ifnum\&yarg<0 \&yarg -\&yarg \fi \ifnum\&xarg<\&yarg \&negargtrue \&yyarg\&xarg \&xarg\&yarg \&yarg\&yyarg\fi \ifcase\&xarg \or % There is no case 0 \ifcase\&yarg % case 1 \dimen@i \z@ \dimen@ii \dimen@ \or % case (1,0) \dimen@i .7071\dimen@ \dimen@ii .7071\dimen@ \fi \or \ifcase\&yarg % case 2 \or % case 0,2 wrong \dimen@i .4472\dimen@ \dimen@ii .8944\dimen@ \fi \or \ifcase\&yarg % case 3 \or % case 0,3 wrong \dimen@i .3162\dimen@ \dimen@ii .9486\dimen@ \or \dimen@i .5547\dimen@ \dimen@ii .8321\dimen@ \fi \or \ifcase\&yarg % case 4 \or % case 0,2,4 wrong \dimen@i .2425\dimen@ \dimen@ii .9701\dimen@ \or\or \dimen@i .6\dimen@ \dimen@ii .8\dimen@ \fi \or \ifcase\&yarg % case 5 \or % case 0,5 wrong \dimen@i .1961\dimen@ \dimen@ii .9801\dimen@ \or \dimen@i .3714\dimen@ \dimen@ii .9284\dimen@ \or \dimen@i .5144\dimen@ \dimen@ii .8575\dimen@ \or \dimen@i .6247\dimen@ \dimen@ii .7801\dimen@ \fi \or \ifcase\&yarg % case 6 \or % case 0,2,3,4,6 wrong \dimen@i .1645\dimen@ \dimen@ii .9864\dimen@ \or\or\or\or \dimen@i .6402\dimen@ \dimen@ii .7682\dimen@ \fi \fi \if&negarg \&tempdima\dimen@i \dimen@i\dimen@ii \dimen@ii\&tempdima\fi #3\dimen@i\relax #4\dimen@ii\relax }% \catcode`\&=4 % Back to alignment tab \def\generalhmap{\futurelet\next\@generalhmap}% \def\@generalhmap{\ifx\next^ \let\temp\generalhm@rph\else \ifx\next_ \let\temp\generalhm@rph\else \let\temp\m@kehmap\fi\fi \temp}% \def\generalhm@rph#1#2{\ifx#1^ \toks@=\expandafter{\the\toks@#1{\rtm@rphtrue\@shiftmorph{#2}}}\else \toks@=\expandafter{\the\toks@#1{\rtm@rphfalse\@shiftmorph{#2}}}\fi \generalhmap}% \def\m@kehmap{\mathrel{\smash{\the\toks@}}}% \def\mapright{\toks@={\mathop{\vcenter{\smash{\drawrightarrow}}}\limits}% \generalhmap}% \def\mapleft{\toks@={\mathop{\vcenter{\smash{\drawleftarrow}}}\limits}% \generalhmap}% \def\bimapright{\toks@={\mathop{\vcenter{\smash{\drawbirightarrow}}}\limits}% \generalhmap}% \def\bimapleft{\toks@={\mathop{\vcenter{\smash{\drawbileftarrow}}}\limits}% \generalhmap}% \def\adjmapright{\toks@={\mathop{\vcenter{\smash{\drawadjrightarrow}}}\limits}% \generalhmap}% \def\adjmapleft{\toks@={\mathop{\vcenter{\smash{\drawadjleftarrow}}}\limits}% \generalhmap}% \def\hline{\toks@={\mathop{\vcenter{\smash{\drawhline}}}\limits}% \generalhmap}% \def\bihline{\toks@={\mathop{\vcenter{\smash{\drawbihline}}}\limits}% \generalhmap}% \def\drawrightarrow{\hbox{\drawvector(1,0){\harrowlength}}}% \def\drawleftarrow{\hbox{\drawvector(-1,0){\harrowlength}}}% \def\drawbirightarrow{\hbox{\raise.5\channelwidth \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth \llap{\drawvector(1,0){\harrowlength}}}}% \def\drawbileftarrow{\hbox{\raise.5\channelwidth \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth \llap{\drawvector(-1,0){\harrowlength}}}}% \def\drawadjrightarrow{\hbox{\raise.5\channelwidth \hbox{\drawvector(-1,0){\harrowlength}}\lower.5\channelwidth \llap{\drawvector(1,0){\harrowlength}}}}% \def\drawadjleftarrow{\hbox{\raise.5\channelwidth \hbox{\drawvector(1,0){\harrowlength}}\lower.5\channelwidth \llap{\drawvector(-1,0){\harrowlength}}}}% \def\drawhline{\hbox{\drawline(1,0){\harrowlength}}}% \def\drawbihline{\hbox{\raise.5\channelwidth \hbox{\drawline(1,0){\harrowlength}}\lower.5\channelwidth \llap{\drawline(1,0){\harrowlength}}}}% \def\generalvmap{\futurelet\next\@generalvmap}% \def\@generalvmap{\ifx\next\lft \let\temp\generalvm@rph\else \ifx\next\rt \let\temp\generalvm@rph\else \let\temp\m@kevmap\fi\fi \temp}% \toksdef\toks@@=1 \def\generalvm@rph#1#2{\ifx#1\rt % append \toks@=\expandafter{\the\toks@ \rlap{$\vcenter{\rtm@rphtrue\@shiftmorph{#2}}$}}\else % prepend \toks@@={\llap{$\vcenter{\rtm@rphfalse\@shiftmorph{#2}}$}}% \toks@=\expandafter\expandafter\expandafter{\expandafter\the\expandafter \toks@@ \the\toks@}\fi \generalvmap}% \def\m@kevmap{\the\toks@}% \def\mapdown{\toks@={\vcenter{\drawdownarrow}}\generalvmap}% \def\mapup{\toks@={\vcenter{\drawuparrow}}\generalvmap}% \def\bimapdown{\toks@={\vcenter{\drawbidownarrow}}\generalvmap}% \def\bimapup{\toks@={\vcenter{\drawbiuparrow}}\generalvmap}% \def\adjmapdown{\toks@={\vcenter{\drawadjdownarrow}}\generalvmap}% \def\adjmapup{\toks@={\vcenter{\drawadjuparrow}}\generalvmap}% \def\vline{\toks@={\vcenter{\drawvline}}\generalvmap}% \def\bivline{\toks@={\vcenter{\drawbivline}}\generalvmap}% \def\drawdownarrow{\hbox to5pt{\hss\drawvector(0,-1){\varrowlength}\hss}}% \def\drawuparrow{\hbox to5pt{\hss\drawvector(0,1){\varrowlength}\hss}}% \def\drawbidownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}% \hskip\channelwidth\hbox{\drawvector(0,-1){\varrowlength}}\hss}}% \def\drawbiuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}% \hskip\channelwidth\hbox{\drawvector(0,1){\varrowlength}}\hss}}% \def\drawadjdownarrow{\hbox to5pt{\hss\hbox{\drawvector(0,-1){\varrowlength}}% \hskip\channelwidth\lower\varrowlength \hbox{\drawvector(0,1){\varrowlength}}\hss}}% \def\drawadjuparrow{\hbox to5pt{\hss\hbox{\drawvector(0,1){\varrowlength}}% \hskip\channelwidth\raise\varrowlength \hbox{\drawvector(0,-1){\varrowlength}}\hss}}% \def\drawvline{\hbox to5pt{\hss\drawline(0,1){\varrowlength}\hss}}% \def\drawbivline{\hbox to5pt{\hss\hbox{\drawline(0,1){\varrowlength}}% \hskip\channelwidth\hbox{\drawline(0,1){\varrowlength}}\hss}}% \def\commdiag#1{\null\, \vcenter{\commdiagbaselines \m@th\ialign{\hfil$##$\hfil&&\hfil$\mkern4mu ##$\hfil\crcr \mathstrut\crcr\noalign{\kern-\baselineskip} #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}% \def\commdiagbaselines{\baselineskip15pt \lineskip3pt \lineskiplimit3pt }% \def\gridcommdiag#1{\null\, \vcenter{\offinterlineskip \m@th\ialign{&\vbox to\vgrid{\vss \hbox to\hgrid{\hss\smash{$##$}\hss}}\crcr \mathstrut\crcr\noalign{\kern-\vgrid} #1\crcr\mathstrut\crcr\noalign{\kern-.5\vgrid}}}\,}% \newdimen\harrowlength \harrowlength=60pt \newdimen\varrowlength \varrowlength=.618\harrowlength \newdimen\sarrowlength \sarrowlength=\harrowlength \newdimen\hmorphposn \hmorphposn=\z@ \newdimen\vmorphposn \vmorphposn=\z@ \newdimen\morphdist \morphdist=4pt \dimendef\@hmorphdflt 0 % These two dimensions are \dimendef\@vmorphdflt 2 % defined by \getm@rphposn \newdimen\hmorphposnrt \hmorphposnrt=\z@ \newdimen\hmorphposnlft \hmorphposnlft=\z@ \newdimen\vmorphposnrt \vmorphposnrt=\z@ \newdimen\vmorphposnlft \vmorphposnlft=\z@ \let\hmorphposnup=\hmorphposnrt \let\hmorphposndn=\hmorphposnlft \let\vmorphposnup=\vmorphposnrt \let\vmorphposndn=\vmorphposnlft \newdimen\hgrid \hgrid=15pt \newdimen\vgrid \vgrid=15pt \newdimen\hchannel \hchannel=0pt \newdimen\vchannel \vchannel=0pt \newdimen\channelwidth \channelwidth=3pt \dimendef\@hchannel 0 % Defined via the \dimendef\@vchannel 2 % macro \getch@nnel \catcode`& = \@oldandcatcode \catcode`@ = \@oldatcatcode \def\environment#1{% \ifx\@groupname\@undefined\else \errhelp = \@unnamedendgrouphelp \errmessage{`\@groupname' was not closed by \string\endenvironment}% \fi \edef\@groupname{#1}% \begingroup \let\@groupname = \@undefined \def\endenvironment#1{% \endgroup \edef\@thearg{#1}% \ifx\@groupname\@thearg \else \ifx\@groupname\@undefined \errhelp = \@isolatedendenvironmenthelp \errmessage{Isolated \string\endenvironment\space for `#1'}% \else \errhelp = \@mismatchedenvironmenthelp \errmessage{Environment `#1' ended, but `\@groupname' started}% \endgroup % Probably a typo in the names. \fi \fi \let\@groupname = \@undefined \newhelp\@unnamedendgrouphelp{Most likely, you just forgot an^^J% \string\endenvironment. Maybe you should try inserting another^^J% \string\endgroup to recover.}% \newhelp\@isolatedendenvironmenthelp{You ended an environment X, but^^J% no \string\environment{X} to start it is anywhere in sight.^^J% You might also be at an \string\endenvironment\space that would match^^J% a \string\begingroup, i.e., you forgot an \string\endgroup.}% \newhelp\@mismatchedenvironmenthelp{You started an environment named X, but^^J% you ended one named Y. Maybe you made a typo in one^^J% or the other of the names?}% \newif\ifenvironment \def\checkenv{\ifenvironment \errhelp = \@interwovenenvhelp \errmessage{Interwoven environments}% \egroup \fi \newhelp\@interwovenenvhelp{Perhaps you forgot to end the previous^^J% environment? I'm finishing off the current group,^^J% hoping that will fix it.}% \newtoks\previouseverydisplay \newdimen\leftdisplayindent \def\leftdisplays{% \previouseverydisplay = \everydisplay \everydisplay = \expandafter{\the\previouseverydisplay \displaysetup}% \let\@save@maybedisableeqno = \@maybedisableeqno \let\@saveeqno = \eqno \let\@saveleqno = \leqno \let\@saveeqalignno = \eqalignno \let\@saveleqalignno = \leqalignno \let\@maybedisableeqno = \relax \def\eqno{\hfill\textstyle\enspace}% \def\leqno{% \hfill \hbox to0pt\bgroup \kern-\displaywidth \kern-\displayindent $\aftergroup\@leftleqnoend \@redefinealignmentdisplays \def\centereddisplays{% \let\displaysetup = \relax \let\@maybedisableeqno = \@save@maybedisableeqno \let\eqno = \@saveeqno \let\leqno = \@saveleqno \let\eqalignno = \@saveeqalignno \let\leqalignno = \@saveleqalignno \def\displaysetup{% \hbox to\displaywidth\bgroup \strut \dimen@ = \parindent \advance\dimen@ by \leftdisplayindent \advance\dimen@ by \leftskip \hskip\dimen@ \advance\displayindent by \dimen@ \advance\displaywidth by -\parindent \advance\displaywidth by -\leftdisplayindent \advance\displaywidth by -\leftskip $% \advance\hsize by -\displayindent \aftergroup\@lefteqend \displaystyle \def\@lefteqend{\hfil\egroup$}% gets inserted between the ending $$ \def\@leftleqnoend{\hss \egroup$}% \def\@redefinealignmentdisplays{% \def\displaylines##1{\displ@y \vcenter{% \halign{\hbox to\displaywidth{$\@lign\displaystyle####\hfil$\hfil}\crcr ##1\crcr}}}% \def\eqalignno##1{\displ@y \let\noalign = \@lefteqalignonoalign \vcenter{% \halign to\displaywidth{% $\@lign\displaystyle{####}$\tabskip\z@skip &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering &\llap{$\@lign####$}\tabskip\z@skip\crcr ##1\crcr}}}% \def\leqalignno##1{\displ@y \let\eqno = \relax \vcenter{% \halign to\displaywidth{% \hfil$\@lign\displaystyle{####}$\tabskip\z@skip &$\@lign\displaystyle{{}####}$\hfil\tabskip\centering &\kern-\displaywidth \rlap{\kern-\displayindent $\@lign####$}% \tabskip\displaywidth\crcr ##1\crcr}}}% \let\@primitivenoalign = \noalign \newtoks\@everynoalign \def\@lefteqalignonoalign#1{% \@primitivenoalign{% \advance\leftskip by -\parindent \advance\leftskip by -\leftdisplayindent \parskip = 0pt \parindent = 0pt \the\@everynoalign #1% \def\monthname{% \ifcase\month \or Jan\or Feb\or Mar\or Apr\or May\or Jun% \or Jul\or Aug\or Sep\or Oct\or Nov\or Dec% \fi \def\fullmonthname{% \ifcase\month \or January\or February\or March\or April\or May\or June% \or July\or August\or September\or October\or November\or December% \fi \def\timestring{\begingroup \count0 = \time \divide\count0 by 60 \count2 = \count0 % The hour, from zero to 23. \count4 = \time \multiply\count0 by 60 \advance\count4 by -\count0 % The minute, from zero to 59. \ifnum\count4<10 \toks1 = {0}% \else \toks1 = {}% \fi \ifnum\count2<12 \toks0 = {a.m.}% \else \toks0 = {p.m.}% \advance\count2 by -12 \fi \ifnum\count2=0 \count2 = 12 \fi \number\count2:\the\toks1 \number\count4 \thinspace \the\toks0 \endgroup}% \def\timestamp{\number\day\space\monthname\space\number\year\quad\timestring}% \def\today{\the\day\ \fullmonthname\ \the\year}% \newskip\abovelistskipamount \abovelistskipamount = .5\baselineskip \newcount\abovelistpenalty \abovelistpenalty = 10000 \def\abovelistskip{\vpenalty\abovelistpenalty \vskip\abovelistskipamount}% \newskip\interitemskipamount \interitemskipamount = 0pt \newcount\belowlistpenalty \belowlistpenalty = -50 \def\belowlistskip{\vpenalty\belowlistpenalty \vskip\belowlistskipamount}% \newskip\belowlistskipamount \belowlistskipamount = .5\baselineskip \newcount\interitempenalty \interitempenalty = 0 \def\interitemskip{\vpenalty\interitempenalty \vskip\interitemskipamount}% \newdimen\listleftindent \listleftindent = 0pt \newdimen\listrightindent \listrightindent = 0pt \let\listmarkerspace = \enspace \newtoks\everylist \def\listcompact{\interitemskipamount = 0pt \relax}% \newdimen\@listindent \def\beginlist{% \abovelistskip \@listindent = \parindent \advance\@listindent by \listleftindent \advance\leftskip by \@listindent \advance\rightskip by \listrightindent \itemnumber = 1 \the\everylist \def\li{\@getoptionalarg\@finli}% \def\@finli{% \ifx\@optionalarg\empty \else \expandafter\writeitemxref\expandafter{\@optionalarg}% \fi \ifnum\itemnumber=1 \else \interitemskip \fi \printitem \advance\itemnumber by 1 \advance\itemletter by 1 \advance\itemromannumeral by 1 \ignorespaces \def\writeitemxref#1{% \toks0 = {#1}% \readauxfile \edef\@wr{\noexpand\writeaux{\string\@definexref{\the\toks0}{\marker}}}% \@wr \def\printitem{% \par \vskip-\parskip \noindent \printmarker\marker \def\printmarker#1{\llap{\marker \enspace}}% \def\endlist{\belowlistskip}% \newcount\numberedlistdepth \newcount\itemnumber \newcount\itemletter \newcount\itemromannumeral \def\numberedmarker{% \ifcase\numberedlistdepth (impossible)% \or \printitemnumber \or \printitemletter \or \printitemromannumeral \else *% \fi \def\printitemnumber{\number\itemnumber}% \def\printitemletter{\char\the\itemletter}% \def\printitemromannumeral{\romannumeral\itemromannumeral}% \def\numberedprintmarker#1{\llap{#1) \listmarkerspace}}% \def\numberedlist{\environment{@numbered-list}% \advance\numberedlistdepth by 1 \itemletter = `a \itemromannumeral = 1 \beginlist \let\marker = \numberedmarker \let\printmarker = \numberedprintmarker \def\endnumberedlist{% \par \endenvironment{@numbered-list}% \endlist \let\orderedlist = \numberedlist \let\endorderedlist = \endnumberedlist \newcount\unorderedlistdepth \def\unorderedmarker{% \ifcase\unorderedlistdepth (impossible)% \or \blackbox \or ---% \else *% \fi \def\unorderedprintmarker#1{\llap{#1\listmarkerspace}}% \def\unorderedlist{\environment{@unordered-list}% \advance\unorderedlistdepth by 1 \beginlist \let\marker = \unorderedmarker \let\printmarker = \unorderedprintmarker \def\endunorderedlist{% \par \endenvironment{@unordered-list}% \endlist \def\listing#1{% \par \begingroup \@setuplisting \setuplistinghook \input #1 \endgroup \let\setuplistinghook = \relax \def\linenumberedlisting{% \ifx\lineno\undefined \innernewcount\lineno \fi \lineno = 0 \everypar = {\advance\lineno by 1 \printlistinglineno}% \def\printlistinglineno{\llap{[\the\lineno]\quad}}% \def\listingfont{\tt}% \def\@setuplisting{% \uncatcodespecials \obeywhitespace \makeactive\` \makeactive\^^I \def^^L{\vfill\eject}% \parskip = 0pt \listingfont \makeactive\` \gdef`{\relax\lq}% Defeat ligatures. \makeactive\^^I \gdef^^I{\hskip8\fontdimen2\font \relax}% \def\verbatim{% \begingroup \uncatcodespecials \obeywhitespace \makeactive\` \def\|{|}% \catcode`\|=0 % | will be the escape character \tt \def\endverbatim{\endgroup}% \newif\if@tocfileopened \newwrite\tocfile \let\tocfilebasename = \jobname \def\opentocfile{% \if@tocfileopened\else \global\@tocfileopenedtrue \immediate\openout\tocfile = \tocfilebasename.toc \fi \def\writetocentry#1#2{\writenumberedtocentry{#1}{#2}{}}% \def\writenumberedtocentry#1#2#3{% \ifrewritetocfile \opentocfile \toks0 = {\expandafter\noexpand \csname toc#1entry\endcsname}% \def\temp{#2}% \toks2 = \expandafter{#3}% \edef\cs{\the\toks2}% \edef\@wr{% \write\tocfile{% \the\toks0 {\sanitize\temp}% \ifx\empty\cs\else {\sanitize\cs}\fi {\noexpand\folio}% }% }% \@wr \fi \ignorespaces \newif\ifrewritetocfile \rewritetocfiletrue \def\readtocfile{% \testfileexistence[\tocfilebasename]{toc}% \if@fileexists \input \tocfilebasename.toc \ifrewritetocfile \opentocfile \fi \fi \def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}% \def\tocsectionentry#1#2{\line{\quad\sl #1 \dotfill\ \rm #2}}% \def\tocsubsectionentry#1#2{\line{\qquad\rm #1 \dotfill\ #2}}% \begingroup \catcode`\_ = 8 \gdef\xrlabel#1{#1_}% \endgroup \def\xrdef#1{% \readauxfile \edef\@wr{\noexpand\writeaux{\string\@definexref{#1}{\noexpand\folio}}}% \@wr \ignorespaces \def\@definexref#1#2{\expandafter\gdef\csname\xrlabel{#1}\endcsname{#2}}% \let\ifxrefwarning = \iftrue \def\xrefwarningtrue{\@citewarningtrue \let\ifxrefwarning = \iftrue}% \def\xrefwarningfalse{\@citewarningfalse \let\ifxrefwarning = \iffalse}% \def\xrefn#1{% \readauxfile \expandafter \ifx\csname\xrlabel{#1}\endcsname\relax \if@citewarning \message{\linenumber Undefined label `#1'.}% \fi \expandafter\def\csname\xrlabel{#1}\endcsname{% `{\tt \escapechar = -1 \expandafter\string\csname#1\endcsname }'% }% \fi \csname\xrlabel{#1}\endcsname % Always produce something. \def\xref{p.\thinspace\xrefn}% \newcount\eqnumber \newcount\subeqnumber \def\eqdefn{\@getoptionalarg\@fineqdefn}% \def\@fineqdefn#1{% \ifx\@optionalarg\empty \global\advance\eqnumber by 1 \def\temp{\eqconstruct{\number\eqnumber}}% \else \def\temp{\noexpand\@optionalarg}% \fi \global\subeqnumber = 0 \gdef\@currenteqlabel{#1}% \toks0 = \expandafter{\@currenteqlabel}% \begingroup \def\eqrefn{\noexpand\eqrefn}% \edef\temp{\noexpand\@eqdefn{\the\toks0}{\temp}}% \temp \endgroup \def\eqsubdefn#1{% \global\advance\subeqnumber by 1 \toks0 = {#1}% \toks2 = \expandafter{\@currenteqlabel}% \begingroup \def\eqrefn{\noexpand\eqrefn}% \def\eqsubreftext{\noexpand\eqsubreftext}% \edef\temp{% \noexpand\@eqdefn {\the\toks0}% {\eqsubreftext{\eqrefn{\the\toks2}}{\the\subeqnumber}}% }% \temp \endgroup \def\@eqdefn#1#2{% \readauxfile \edef\@wr{\noexpand\immediatewriteaux{\string\@definexref{#1}{#2}}}% \@wr \expandafter\xdef\csname\xrlabel{#1}\endcsname{#2}% \ignorespaces \def\eqdef{\@getoptionalarg\@fineqdef}% \def\@fineqdef{% \toks0 = \expandafter{\@optionalarg}% \edef\temp{\noexpand\@eqdef{\noexpand\eqdefn[\the\toks0]}}% \temp \def\eqsubdef{\@eqdef\eqsubdefn}% \def\@eqdef#1#2{% #1{#2}% Define the label. \@maybedisableeqno \eqno \eqref{#2}% Print the text. \@mayberestoreeqno \ignorespaces \let\@mayberestoreeqno = \relax \def\@maybedisableeqno{% \ifinner \global\let\eqno = \relax \global\let\@mayberestoreeqno = \@restoreeqno \fi \let\@primitiveeqno = \eqno \def\@restoreeqno{% \global\let\eqno = \@primitiveeqno \global\let\@mayberestoreeqno = \empty \let\eqrefn = \xrefn \def\eqref#1{\eqprint{\eqrefn{#1}}}% \let\eqconstruct = \identity \def\eqprint#1{(#1)}% \def\eqsubreftext#1#2{#1.#2}% \begingroup \catcode `\^^M = \active % \gdef\flushleft{% \def\@endjustifycmd{\@endflushleft}% \def\@eoljustifyaction{\null\hfil\break}% \let\@firstlinejustifyaction = \relax \@startjustify % \gdef\flushright{% \def\@endjustifycmd{\@endflushright}% \def\@eoljustifyaction{\break\null\hfil}% \def\@firstlinejustifyaction{\hfil\null}% \@startjustify % \gdef\center{% \def\@endjustifycmd{\@endcenter}% \def\@eoljustifyaction{\hfil\break\null\hfil}% \def\@firstlinejustifyaction{\hfil\null}% \@startjustify % \gdef\@startjustify{% \parskip = 0pt \catcode`\^^M = \active % \def^^M{\futurelet\next\@finjustifyreturn}% \def\@eateol##1^^M{% \def\temp{##1}% \@firstlinejustifyaction % \ifx\temp\empty\else \temp^^M\fi % }% \expandafter\aftergroup\@endjustifycmd % \checkenv \environmenttrue % \par\noindent % \@eateol % \gdef\@finjustifyreturn{% \@eoljustifyaction % \ifx\next^^M% \def\par{\endgraf\vskip\blanklineskipamount \global\let\par = \endgraf}% \@endjustifycmd % \noindent % \@firstlinejustifyaction % \fi % \endgroup \def\@endflushleft{\unpenalty{\parfillskip = 0pt plus1fil\par}\ignorespaces}% \def\@endflushright{% Remove the \hfil\null\break we just put on. \unskip \setbox0=\lastbox \unpenalty {\parfillskip = 0pt \par}\ignorespaces \def\@endcenter{% Remove the \hfil\null\break we just put on. \unskip \setbox0=\lastbox \unpenalty {\parfillskip = 0pt plus1fil \par}\ignorespaces \newcount\abovecolumnspenalty \abovecolumnspenalty = 10000 \newcount\@linestogo % Lines remaining to process. \newcount\@linestogoincolumn % Lines remaining in column. \newcount\@columndepth % Number of lines in a column. \newdimen\@columnwidth % Width of each column. \newtoks\crtok \crtok = {\cr}% \newcount\currentcolumn \def\makecolumns#1/#2: {\par \begingroup \@columndepth = #1 \advance\@columndepth by #2 \advance\@columndepth by -1 \divide \@columndepth by #2 \@linestogoincolumn = \@columndepth \@linestogo = #1 \currentcolumn = 1 \def\@endcolumnactions{% \ifnum \@linestogo<2 \the\crtok \egroup \endgroup \par % End \valign and \makecolumns. \else \global\advance\@linestogo by -1 \ifnum\@linestogoincolumn<2 \global\advance\currentcolumn by 1 \global\@linestogoincolumn = \@columndepth \the\crtok \else &\global\advance\@linestogoincolumn by -1 \fi \fi }% \makeactive\^^M \letreturn \@endcolumnactions \@columnwidth = \hsize \advance\@columnwidth by -\parindent \divide\@columnwidth by #2 \penalty\abovecolumnspenalty \noindent % It's not a paragraph (usually). \valign\bgroup &\hbox to \@columnwidth{\strut \hsize = \@columnwidth ##\hfil}\cr \newcount\footnotenumber \newdimen\footnotemarkseparation \footnotemarkseparation = .5em \newskip\interfootnoteskip \interfootnoteskip = 0pt \newtoks\everyfootnote \newdimen\footnoterulewidth \footnoterulewidth = 2in \newdimen\footnoteruleheight \footnoteruleheight = 0.4pt \newdimen\belowfootnoterulespace \belowfootnoterulespace = 2.6pt \let\@plainfootnote = \footnote \let\@plainvfootnote = \vfootnote \def\vfootnote#1{\insert\footins\bgroup \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \advance\splittopskip by \interfootnoteskip \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \everypar = {}% \the\everyfootnote \vskip\interfootnoteskip \indent\llap{#1\kern\footnotemarkseparation}\footstrut\futurelet\next\fo@t \def\footnoterule{\dimen0 = \footnoteruleheight \advance\dimen0 by \belowfootnoterulespace \kern-\dimen0 \hrule width\footnoterulewidth height\footnoteruleheight depth0pt \kern\belowfootnoterulespace \vskip-\interfootnoteskip \def\numberedfootnote{% \global\advance\footnotenumber by 1 \@plainfootnote{$^{\number\footnotenumber}$}% \newdimen\paperheight \paperheight = 11in \def\topmargin{\afterassignment\@finishtopmargin \dimen0}% \def\@finishtopmargin{% \dimen2 = \voffset % Remember the old \voffset. \voffset = \dimen0 \advance\voffset by -1in \advance\dimen2 by -\voffset % Compute the change in \voffset. \advance\vsize by \dimen2 % Change type area accordingly. \def\advancetopmargin{% \dimen0 = 0pt \afterassignment\@finishadvancetopmargin \advance\dimen0 \def\@finishadvancetopmargin{% \advance\voffset by \dimen0 \advance\vsize by -\dimen0 \def\bottommargin{\afterassignment\@finishbottommargin \dimen0}% \def\@finishbottommargin{% \@computebottommargin % Result in \dimen2. \advance\dimen2 by -\dimen0 % Compute the change in the bottom margin. \advance\vsize by \dimen2 % Change the type area. \def\advancebottommargin{% \dimen0 = 0pt \afterassignment\@finishadvancebottommargin \advance\dimen0 \def\@finishadvancebottommargin{% \advance\vsize by -\dimen0 \def\@computebottommargin{% \dimen2 = \paperheight % The total paper size. \advance\dimen2 by -\vsize % Less the text size. \advance\dimen2 by -\voffset % Less the offset at the top. \advance\dimen2 by -1in % Less the default offset. \newdimen\paperwidth \paperwidth = 8.5in \def\leftmargin{\afterassignment\@finishleftmargin \dimen0}% \def\@finishleftmargin{% \dimen2 = \hoffset % Remember the old \hoffset. \hoffset = \dimen0 \advance\hoffset by -1in \advance\dimen2 by -\hoffset % Compute the change in \hoffset. \advance\hsize by \dimen2 % Change type area accordingly. \def\advanceleftmargin{% \dimen0 = 0pt \afterassignment\@finishadvanceleftmargin \advance\dimen0 \def\@finishadvanceleftmargin{% \advance\hoffset by \dimen0 \advance\hsize by -\dimen0 \def\rightmargin{\afterassignment\@finishrightmargin \dimen0}% \def\@finishrightmargin{% \@computerightmargin % Result in \dimen2. \advance\dimen2 by -\dimen0 % Compute the change in the right margin. \advance\hsize by \dimen2 % Change the type area. \def\advancerightmargin{% \dimen0 = 0pt \afterassignment\@finishadvancerightmargin \advance\dimen0 \def\@finishadvancerightmargin{% \advance\hsize by -\dimen0 \def\@computerightmargin{% \dimen2 = \paperwidth % The total paper size. \advance\dimen2 by -\hsize % Less the text size. \advance\dimen2 by -\hoffset % Less the offset at the left. \advance\dimen2 by -1in % Less the default offset. \newskip\abovedoublecolumnskip \abovedoublecolumnskip = \bigskipamount \newskip\belowdoublecolumnskip \belowdoublecolumnskip = \bigskipamount \newdimen\gutter \gutter = 2pc \newdimen\doublecolumnhsize \newbox\@partialpage \newdimen\singlecolumnhsize \newdimen\singlecolumnvsize \newtoks\previousoutput \def\doublecolumns{% \doublecolumnhsize = \hsize % If \hsize changed, get the new value. \par % Shouldn't start in horizontal mode. \previousoutput = \expandafter{\the\output}% \advance\doublecolumnhsize by -\gutter \divide\doublecolumnhsize by 2 \output = {% \global\setbox\@partialpage = \vbox{\unvbox255\vskip\abovedoublecolumnskip}% }% \pagegoal = \pagetotal \break % Now expand the \output just above. \output = {\doublecolumnoutput}% \singlecolumnhsize = \hsize \singlecolumnvsize = \vsize \hsize = \doublecolumnhsize \vsize = 2\vsize \def\@doublecolumnsplit{% \splittopskip = \topskip \splitmaxdepth = \maxdepth \dimen0 = \singlecolumnvsize \advance\dimen0 by -\ht\@partialpage \advance\dimen0 by -\ht\footins \ifvoid\footins\else \advance\dimen0 by -\skip\footins \fi \advance\dimen0 by -\ht\topins \ifvoid\topins\else \advance\dimen0 by -\skip\topins \fi \begingroup \vbadness = 10000 \global\setbox1 = \vsplit255 to \dimen0 \wd1 = \hsize \global\setbox3 = \vsplit255 to \dimen0 \wd3 = \hsize \endgroup \global\setbox4 = \vbox{\unvbox255 \penalty\outputpenalty}% \global\setbox255 = \vbox{% \unvbox\@partialpage \hbox to \singlecolumnhsize{\box1\hfil\box3}% }% \def\doublecolumnoutput{% \@doublecolumnsplit \hsize = \singlecolumnhsize % Local to the \output group. \vsize = \singlecolumnvsize \the\previousoutput \unvbox4 \def\singlecolumn{% \par % Shouldn't start in horizontal mode. \output = {\global\setbox1 = \box255}% \pagegoal = \pagetotal \break % Exercise the page builder, i.e., \output. \setbox255 = \box1 % Retrieve what the fake \output set. \begingroup \singlecolumnvsize = \ht\@partialpage \advance\singlecolumnvsize by \ht\footins \ifvoid\footins\else \advance\singlecolumnvsize by \skip\footins\fi \advance\singlecolumnvsize by \ht\topins \ifvoid\topins\else \advance\singlecolumnvsize by \skip\topins\fi \dimen0 = \ht255 \divide\dimen0 by 2 \advance\singlecolumnvsize by \dimen0 \advance\singlecolumnvsize by .5\baselineskip \@doublecolumnsplit \endgroup \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize \output = \expandafter{\the\previousoutput}% \unvbox255 \vskip\belowdoublecolumnskip \nointerlineskip \let\wlog = \@plainwlog \catcode`@ = \@oldatcatcode \def\fmtname{eplain}% \def\eplain{t}% {\edef\plainversion{\fmtversion}% \xdef\fmtversion{2.2: 11 November 1992 (and plain \plainversion)}%